プライベートサブネットにあるEC2インスタンスを Systems Manager で管理する
困っていた内容
プライベートサブネットにあるEC2インスタンスがSSMのマネージドインスタンスに表示されない。
どう対応すればいいの?
プライベートサブネットにあるインターネットアクセス出来ないEC2インスタンスをSSMで管理するには、以下の設定が必要です。
- EC2インスタンスにSSMエージェントがインストールされていること
- SSMへのアクセスに必要なIAMロールがEC2インスタンスに関連付いていること
- VPCエンドポイントが設定されている
そこで、今回は、プライベートサブネットにEC2インスタンスを起動し、SSMのマネージドインスタンスへ表示させるまでを試してみました。 EC2インスタンスには Amazon Linux 2 を使用しています。
① EC2インスタンスでSSMエージェントが起動しているか確認する
対象のEC2インスタンスにログイン後、下記コマンドを実行し、SSMエージェントのステータスを確認します。
active (running) となっていればOKです。
$ sudo systemctl status amazon-ssm-agent ● amazon-ssm-agent.service - amazon-ssm-agent Loaded: loaded (/usr/lib/systemd/system/amazon-ssm-agent.service; enabled; vendor preset: enabled) Active: active (running) since Sun 2020-05-24 00:35:20 UTC; 1h 1min ago Main PID: 3204 (amazon-ssm-agen) CGroup: /system.slice/amazon-ssm-agent.service └─3204 /usr/bin/amazon-ssm-agent (後略)
他のOSを使用している方はこちらからご確認ください。
もし、SSMエージェントがEC2インスタンスにインストールされていなければ、インストールする必要があります。
② EC2インスタンスにSSM用のロールを割り当てる
AWSマネジメントコンソールで操作していきます。
EC2ダッシュボードから対象のEC2インスタンスを選択し、[アクション]→[インスタンスの設定]→[IAMロールの割り当て/置換]からIAMロールを割り当てます。
ここでIAMロールを割り当てます。
既にIAMロールを作成済みの方は、対象のIAMロールを選択します。IAMロールを作成していない方は、「新しいIAMロールを作成する」をクリックし新規作成します。
私は、ポリシー AmazonSSMManagedInstanceCore
のみ追加した IAM ロールを新規作成しました。
AmazonSSMManagedInstanceCore
は、インスタンスが Systems Manager サービスコア機能を使用することができるポリシーです。
想定されている動作によって、Systems Manager インスタンスプロファイルのポリシーとして、他のポリシーが必要な場合もあります。 他のポリシーについては下記ドキュメントをご覧ください。
(参考) ステップ 4: Systems Manager の IAM インスタンスプロファイルを作成する
③ SSMのVPCエンドポイントを作成する
VPCダッシュボードのナビゲーションペインから [エンドポイント] を開き、VPCエンドポイントを作成します。
今回は最低限必要な3つのVPCエンドポイントを作成します。
- com.amazonaws.region.ssm
- com.amazonaws.region.ec2messages
- com.amazonaws.region.ssmmessages
まず、com.amazonaws.region.ssm
から作成していきます。
「サービスカテゴリ」は「AWS サービス」を選択します。
「サービス名」はフィルターで検索しcom.amazonaws.region.ssm
を選択します。
また、「VPC」と「サブネット」を選択します。(「サブネット」は、対象のプライベートサブネットを選択しました。)
「プライベート DNS 名を有効にする」にチェックが入っていることを確認し、セキュリティグループを選択します。または、新規セキュリティグループを作成します。
上記セキュリティグループのインバウンドルールは以下のように設定します。
- Type: HTTPS 443
- Source: 対象のVPCのSubnet CIDR
com.amazonaws.region.ec2messages
/com.amazonaws.region.ssmmessages
についても同様に追加します。
最終的に以下のようになります。
ここで、1つ目のVPCエンドポイント作成時に以下のエラーが発生したので共有します。
VPCダッシュボードから、対象VPCを選択し、[アクション] から [DNS ホスト名の編集] を開きます。
「DNS ホスト名」に有効化のチェックを入れました。
念の為、[DNS 解決の編集]でも確認しました。これは有効になっていました。
再度、VPCエンドポイントの作成をしてみたところ問題なく作成できました。
④ SSMマネージドインスタンスに表示されているか確認する
Systems Managerコンソールのナビゲーションペインから[マネージドインスタンス]を開き確認します。
マネージドインスタンスの一覧に対象EC2インスタンスが表示されました。
一覧に表示されるまでに時間がかかる場合があります。その場合、少し待って確認します。
参照情報
Systems Manager を使用してインターネットアクセスなしでプライベート EC2 インスタンスを管理できるように、VPC エンドポイントを作成するにはどうすればよいですか?